Solução para arquivos com ^M no final de cada linha

Publicado por Rafael Brianezi da Silva em 27/08/2008

[ Hits: 16.339 ]

 


Solução para arquivos com ^M no final de cada linha



Você criou um arquivo texto no Windows, e ao abrí-lo no Linux apareceu um ^M no final de cada linha? Veja como usar o Perl para resolver!

Digite a linha de comando abaixo, em um prompt Linux:

perl -pi -e 's/\r/\n/g' arquivo.txt

Explicação sobre o comando:
  • perl - interpretador de comandos em si;
  • -p = faz a leitura de todos os argumentos como arquivos e faz um print de todas as linhas no fim do processamento de cada uma;
  • -i = edita os arquivos que recebe como argumento;
  • -e = executa a expressão informada a seguir;
  • 's/\r/\n/g' = s/string_atual/string_nova/g, onde:
    s = Significa "substitute", ou seja, é utilizado no formato s/// quando se deseja substituir uma string por outra;
    g = Significa que toda vez que for encontrada a "string_atual" no arquivo, esta será substituída pela "string_nova".

    Obs.: Caso o "g" não seja especificado, somente a primeira ocorrência encontrada sera substituída.

    \r = Representa o final de linha no padrão DOS/Windows;
    \n = Representa o final de linha no padrão Unix/Linux.

Caso você necessite aplicar este comando em muitos arquivos, segue abaixo uma sugestão. :)

find /diretório_arquivos -type f -exec perl -pi -e 's/\r/\n/g' {} \;

Onde:
  • find = Efetua a busca especificada;
  • /diretório_arquivos = Diretório que contém os arquivos;
  • -type f = Significa (file), ou seja, somente estaremos pesquisando somente em arquivos;
  • -exec = Executa um comando;
  • perl -pi -e 's/\r/\n/g' = Comando já explicado acima;
  • {} \; = Indica que o comando perl -pi -e 's/\r/\n/g' será aplicado em todos os arquivos que forem encontrados pelo comando find.

Outras dicas deste autor

Ubuntu - Destacando Aba Ativa no Gnome-Terminal (Parte 2)

Ubuntu - Destacando Aba Ativa no Gnome-Terminal

Instalando o IONCube Loader no Debian

Firefox abrindo em modo offline

Desvendando o comando DATE

Leitura recomendada

sysdig - Ferramenta de inspeção de eventos em tempo real

Renomeando arquivos simultaneamente com apenas uma linha de comando

Escondendo arquivos no Linux

Excluindo "output errors" nas saídas dos comandos

Alterando endereço MAC da interface de rede

  

Comentários
[1] Comentário enviado por removido em 27/08/2008 - 13:13h

bacana a dica. vou anotar.

embora quando crio arquivos de textos no win eu utilizo o notepad++ http://notepad-plus.sourceforge.net/

. que ja faz este servico, basta ir em FORMAT -> CONVERT TO UNIX FORMAT. há também uma aplicacao linux (dos2unix) que faz isso tb, embora nao tenha usado.

valeu

[2] Comentário enviado por viniciuscordeiro em 27/08/2008 - 13:52h

Quem se interessar em usar o dos2unix pra facilitar a vida, acabei de publicar um post no meu blog:

http://blog.viniciuscordeiro.com/

http://blog.viniciuscordeiro.com/2008/08/transformando-arquivos-para-formato-unix-dos/

[3] Comentário enviado por SMarcell em 27/08/2008 - 14:25h

Também pode-se utilizar o tr:

$ tr -s '\r' '\n' < arq.txt > novo_arq.txt


[4] Comentário enviado por gamont em 12/04/2009 - 23:56h

Só usando Vim.
:args *.txt (ou no shell: vim *.txt)
:argdo %s/^M$//ge | update

'args' carrega os arquivos.
'argdo' aplica os comandos em cada arquivo.
o primeiro comando substitue o carriage-return por nada
o segundo grava o arquivo, se houve alteração



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts